The wide adoption of the Internet, and networked computing in general, has resulted in the proliferation of computer servers. A server can be generally defined as a computer that provides services to other computers over a network. Among a server's many uses are the distribution of web pages, e-mail messages, files, electronic newsgroups and the support of multi-user virtual environments.
Evaluating a server's performance will usually depend on the nature of the server and the particular purpose it is used for. In the case of the Internet, one of the primary purposes of an
In reality, commonly used CPU's do not execute more than one thread or process at the same time. They just create that illusion by quickly switching between threads or processes. When a CPU switches between two threads or processes, it must execute a context switch, which means that it must replace all the data and instructions associated with the old thread or process with those associated with the new thread or process. Threads, however, have very little data that is unique to them, they usually share the process data with the other threads of the same process. Thus, switching between different threads in a single process is less resource consuming than switching between different processes, since switching between different threads of the same process requires the replacement of smaller amounts of data. So a single application can run several tasks as threads concurrently, without incurring the higher context switching costs of running several processes concurrently.
Server testing software often takes advantage of the multitasking capabilities of an OS by simulating each virtual user as a different process. An ordinary internet user engaged in usual internet activity, such as web browsing, will probably use several threads that make network calls. Thus, it would be accurate to simulate such a user by a process that contains several threads, each creating a network connection to the server.
Most commonly used operating systems are engineered to provide high performance for relatively small numbers of threads and processes. However, good server testing software should be able to simulate thousands of virtual users on a single machine. This would result in thousands of threads, which a commonly used OS may not be able to handle efficiently. Internet server is to process a large number of requests coming from a large number of different computers or users.
When a server approaches its maximum load it tends to slow down significantly. Thus, when a server accepts too many requests from too many users, it increases the time needed to process each request. As a result, all users experience degraded quality of service. For this reason it is very important for server administrators and network administrators, as well as software developers, to be able to choose and configure their servers in a way that enables them to handle foreseeable loads without significant service degradation.
One of the best ways to determine a server's performance capabilities is to test it. Testing is usually performed by simulating the environment of users and computers that are meant to be served by a server. While a server may be required to serve many thousands of users, using thousands of computers to simulate these users is usually impracticable. Thus, for testing purposes many users are simulated using a single or a small number of testing or simulation computers. These simulation computers run testing software, which is designed to simulate many users or computers that are making requests to, or generally exchanging information with the server. Usually these simulated users are called virtual users.
Testing software usually utilizes a multitasking Operating System (OS) and CPU. Most modem multitasking OS's support both process and thread multitasking. A thread is the basic unit of program execution. It includes a list of instructions that is treated by the processor as a single sequential flow of control. A process on the other hand is a larger unit of program execution, that may contain several threads. At any time a computer may be executing several processes concurrently and several threads within each process.